package com.teamwork_backend.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teamwork_backend.entity.Positions;
import com.teamwork_backend.entity.ResumePosition;
import com.teamwork_backend.entity.UserInfo;
import com.teamwork_backend.entity.ov.PositionsList;
import com.teamwork_backend.entity.ov.PositionsListView;
import com.teamwork_backend.mapper.PositionsDao;
import com.teamwork_backend.mapper.UserInfoDao;
import com.teamwork_backend.service.PositionsService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/positions")
@Api(value = "PositionsController", tags = {"职位信息接口"})
public class PositionsController {
    @Autowired
    private PositionsService positionsService;

    /** 获取职位信息 */
    @PostMapping("getPositions") // Post方法
    @ApiOperation(value = "查询职位信息", notes = "查询职位信息", httpMethod = "POST")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionid", value = "职位唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getPositions(String positionid) {
        // 定义查询字段
        // wrapper用法见https://blog.csdn.net/m0_37034294/article/details/82917234
        QueryWrapper<Positions> wrapper = new QueryWrapper<>();
        wrapper.select().eq("positionid", positionid);
        // 会自动生成 SELECT * FROM user_info WHERE userid = userid
        // 定义数据接收对象
        Positions positions = positionsService.getOne(wrapper);
        // 如果是列表 List<UserInfo> userInfos = userInfoService.list(wrapper);
        // 判断是否存在该职位信息
        if(positions != null) {
            // 成功返回数据
            return DataResult.finished().data("data", positions).message("职位信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息不存在！");
        }
    }


    @Resource
    private PositionsDao positionsDao;

    /** 获取职位信息列表 */
    @GetMapping("getPositionslist") // Get方法
    @ApiOperation(value = "获取职位信息列表", notes = "获取职位信息列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyid", value = "公司唯一标示", required = true, dataType = "string")})
    public DataResult getlist(String companyid) {
        QueryWrapper<Positions> wrapper = new QueryWrapper<>();
        wrapper.select().eq("companyid", companyid);
        List<Positions> positions = positionsService.list(wrapper);
        if(positions != null) {
            // 成功返回数据
            return DataResult.finished().data("data", positions).message("信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("信息不存在！");
        }
    }

    /** 增加职位信息
     */
    @PostMapping("addtPositions") // Post方法
    @ApiOperation(value = "增加职位信息", notes = "增加职位信息", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult addtPositions(
            @ApiParam(name = "position", value = "职位信息对象", required = true)
            @RequestBody Positions positions)
    {
        // 设置添加成功的返回标志
        boolean flag = positionsService.save(positions);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("职位信息添加成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息添加失败！");
        }
    }


    /** 删除职位信息
     */
    @GetMapping("delPosition") // Get方法
    @ApiOperation(value = "删除职位信息", notes = "删除职位信息", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionid", value = "职位唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult delPosition(String positionid) {
        // 设置删除成功的返回标志
        boolean flag = positionsService.removeById(positionid); // 删除

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("职位信息删除成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息删除失败！");
        }
    }

    /** 更新职位信息
     * 需要输入positionid
     */
    @PostMapping("updatePostions") // Post方法
    @ApiOperation(value = "更新职位信息", notes = "更新职位信息", httpMethod = "POST")
    public DataResult updatePositions(
            @ApiParam(name = "position", value = "职位信息对象", required = true)
            @RequestBody Positions positions)
    {
        // 设置添加成功的返回标志
        boolean flag = positionsService.updateById(positions);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("职位信息更新成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息更新失败！");
        }
    }



    /** 模糊查询获取职位信息列表 */
    @GetMapping("getPosition") // Get方法
    @ApiOperation(value = "模糊查询获取职位信息列表", notes = "模糊查询获取职位信息列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "搜索内容", required = false, dataType = "string")})
    public DataResult getpositions(String content) {
        // 定义数据接收对象，这里调用了UserInfoDao.java层中的自定义SQL语句方法
        List<PositionsListView> positionsListView = positionsDao.searchPositions(content);
        // 判断是否存在该用户信息
        if(positionsListView != null) {
            // 成功返回数据
            return DataResult.finished().data("data", positionsListView).message("职位信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息不存在！");
        }
    }

    /** 模糊查询获取职位列表所有信息 */
    @GetMapping("getAllPosition") // Get方法
    @ApiOperation(value = "模糊查询获取职位列表所有信息", notes = "模糊查询获取职位列表所有", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "搜索内容", required = false, dataType = "string")})
    public DataResult getallpositions(String content) {
        // 定义数据接收对象，这里调用了UserInfoDao.java层中的自定义SQL语句方法
        List<PositionsList> positionsList = positionsDao.searchallPositions(content);
        // 判断是否存在该用户信息
        if(positionsList != null) {
            // 成功返回数据
            return DataResult.finished().data("data", positionsList).message("职位信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("职位信息不存在！");
        }
    }

}




